/**
 * 功能: 检测浏览器
 * @author Conan
 * @CreatedTime 2020-06-29
 */

class CheckBrowser {
  constructor() {
    this.userAgent = navigator.userAgent;
    // 安卓手机
    this.Android = this.userAgent.indexOf('Android') > -1 || this.userAgent.indexOf('Linux') > -1;
    // 苹果手机
    this.IPhone = this.userAgent.indexOf("iPhone") != -1;
    // IOS系统浏览器
    this.Ios = this.userAgent.indexOf('iPhone') > -1 || this.userAgent.indexOf('Mac') > -1;
    // 平板
    this.Ipad = this.userAgent.indexOf('iPad') > -1;
    // 欧朋浏览器
    this.Opera = this.userAgent.indexOf("Opera") > -1;
    // IE浏览器 (只能判断版本小于11的IE)
    this.IE = this.userAgent.indexOf("compatible") > -1 && this.userAgent.indexOf('MSIE') > -1 && !this.Opera;
    // IE11 版本 (只能判断版本大于等于11的IE)
    this.IE11 = this.userAgent.indexOf('Trident') > -1 && this.userAgent.indexOf('rv:11.0') > -1;
    // edge 浏览器
    this.Edge = this.userAgent.indexOf("Edge") > -1;
    // 火狐浏览器
    this.FireFox = this.userAgent.indexOf('Firefox') > -1;
    // 苹果自带浏览器
    this.Safari = this.userAgent.indexOf('Safari') > -1 && this.userAgent.indexOf('Chrome') == -1;
    // 谷歌浏览器
    this.Chrome = !this.Edge && this.userAgent.indexOf('Chrome') > -1 && this.userAgent.indexOf('Safari') > -1;
    // 微信浏览器
    this.Wechat=!!this.userAgent.match(/MicroMessenger/i);
    // 微博浏览器
    this.Weibo=!!this.userAgent.match(/Weibo/i);
    // UC 浏览器
    this.UCBrowser=!!this.userAgent.match(/UCBrowser/i);
    // QQ内置浏览器
    this.QQ=!!this.userAgent.match(/QQ/i);
    // QQ浏览器
    this.QQBrowser=!this.userAgent.indexOf('MQQBrowser') > -1 && this.userAgent.indexOf('QQ/');
  }

  /**
   * 功能: 获取浏览器是否IE浏览器
   * @parame:
   * @desc:
   */
  getIsIE() {
    return this.IE11 || this.IE
  }

  /**
   * 功能: 获取IE判断号
   * @parame:
   * @desc:
   * 1. 调用此方法前最好是先判断是否 IE 浏览器
   */
  getIeVersions(){
    let data = {
      v: '',
      isIe: false
    }
    if(this.IE){
      if (this.IE11) {
        data.v = 11
      } else {
        let IEReg = new RegExp('MSIE (\\d+\\.\\d+);');
        // 正则表达式匹配浏览器的userAgent字符串中MSIE后的数字部分，，这一步不可省略！！！
        IEReg.test(this.userAgent);
        // 取正则表达式中第一个小括号里匹配到的值
        let IEVersionNum = parseFloat(RegExp['$1']);
        if (IEVersionNum === 7) {
          data.v = 7
        } else if (IEVersionNum === 8) {
          data.v = 8
        } else if (IEVersionNum === 9) {
          data.v = 9
        } else if (IEVersionNum === 10) {
          data.v = 10
        } else {
          data.v = 6
        }
      }
      data.isIe = true
    }
    return data
  }

  /**
   * 功能: 比较IE版本号
   * @parame: v 版本号
   * @desc:
   * 1. 调用此方法前最好是先判断是否 IE 浏览器
   * 2. 比较当前IE是否大于 v 的版本号
   */
  compareIEv(v = 11) {
    let ieData = this.getIeVersions()
    return Number(ieData.v) >= Number(v);
  }

  /**
   * 功能: 判断是 PC端 还是 移动端
   * @parame:
   * @desc:
   */
  isMobile(){
    return !!this.userAgent.match(/AppleWebKit.*Mobile.*/) && !!this.userAgent.match(/AppleWebKit/);
  }

  /**
   * 功能: 获取操作系统
   * @parame:
   * @desc:
   */
  getOS() {
    if (!!this.userAgent.match(/compatible/i) || this.userAgent.match(/Windows/i)) {
      return 'windows'
    } else if (!!this.userAgent.match(/Macintosh/i) || this.userAgent.match(/MacIntel/i)) {
      return 'macOS'
    } else if (!!this.userAgent.match(/iphone/i) || this.userAgent.match(/Ipad/i)) {
      return 'ios'
    } else if (!!this.userAgent.match(/android/i)) {
      return 'android'
    } else {
      return 'other'
    }
  }
}

export default CheckBrowser
